package com.huang.auth.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.huang.auth.entity.po.AuthResourcePO;
import com.huang.auth.entity.po.AuthUserPO;
import com.huang.auth.entity.po.CommonLoginLogPO;
import com.huang.auth.entity.request.*;
import com.huang.auth.entity.to.LoginTO;
import com.huang.auth.entity.vo.AuthUserInfoVO;
import com.huang.auth.entity.vo.RoutesVO;
import com.huang.entity.request.RPage;

import java.util.List;
import java.util.Set;

/**
 * 用户(AuthUser)表服务接口
 *
 * @author HuangShen
 * @since 2021-09-21 17:13:57
 */
public interface AuthUserService extends IService<AuthUserPO> {

    /**
     * 登录
     * @return LoginTO
     */
    LoginTO login(LoginRequest loginRequest);


    /**
     * 根据用户账号查询 可以访问的资源
     *
     * @param userId  用户id
     * @return list
     */
    List<AuthResourcePO> queryResourceByUserId(Long userId);

    /**
     * 添加用户
     * @param authUserAddRequest 添加用户vo
     * @return boolean
     */
    boolean userAdd(AuthUserAddRequest authUserAddRequest, Long createUser);


    /**
     * 根据userId 获取用userInfo
     * @param userId userId
     * @return AuthUserInfoVO
     */
    AuthUserInfoVO queryUserInfoById(Long userId);

    /**
     * 根据userId 获取 Menu
     * @param userId 用户id
     * @return Set<RoutesVO>
     */
    Set<RoutesVO> queryMenuByUserId(String userId);

    /**
     * 根据account 修改用户状态
     * @param account 账号
     * @param operatorId 操作者id
     * @return boolean
     */
    boolean changeUserStatus(String account,Long operatorId);

    /**
     * 根据account 删除用户
     * @param account account
     * @param operatorId operatorId
     * @return boolean
     */
    boolean delUser(String account,Long operatorId);


    /**
     * 根据账号获取  AuthUserPO
     * @param account  账号
     * @return AuthUserPO
     */
    AuthUserPO selectOneAuthPOByAccount(String account);

    /**
     * 重置密码  AuthUserPO
     * @param account  账号
     * @return AuthUserPO
     */
    boolean resPassword(String account,Long operatorId);

    /**
     * 修改密码
     * @param passwordChangeRequest passwordChangeRequest
     * @return boolean
     */
    boolean changePassword(PasswordChangeRequest passwordChangeRequest);

    /**
     * 修改用户信息
     * @param authUserEditRequest authUserEditRequest
     * @return  boolean
     */
    boolean userEdit(AuthUserEditRequest authUserEditRequest);

    /**
     * 查询登陆日志
     */
    Page<CommonLoginLogPO> loginLogs(String userId, RPage rPage);

    /**
     * 查询用户列表
     */
    Page<AuthUserPO> userListByPage(AuthUserQueryRequest authUserQueryRequest);

    /**
     * 根据用户id 查询角色id
     * @param userId
     * @return
     */
    List<String> queryRoleIdByUserId(String userId);
}


